/**
 * ============  发布订阅模式 =====================
 */
const fs = require("fs") //

let event = {
  _arr: [], // 每次on订阅的时候, 都传入一个 函数, _arr来存这些函数
  data: {},
  on(fn) {
    this._arr.push(fn)
  },
  emit(key, value) { // 发布的时候, 传入 key value
    this.data[key] = value
    this._arr.forEach(fn => fn(this.data))
  }
}

fs.readFile("./name.txt", "utf8", (err, data) => {
  console.log(1);
  event.emit("name", data)
})
fs.readFile("./age.txt", "utf8", (err, data) => {
  console.log(2);
  event.emit("age", data)
})

// 发布订阅模式, 需要两个方法 "订阅"  "发布"
event.on((data) => { // 订阅第一次
  console.log("收到了一个数据 --->>", data);
})
event.on((data) => { // 订阅第二次
  if (Reflect.ownKeys(data).length == 2) {
    console.log("收到了全部数据", data);
  }
})


// 观察者模式 和 发布订阅模式

// (观察者模式是基于发布订阅的, 观察者模式是基于类来实现的)


